package cn.wjssl.test.stream;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.*;
import java.util.stream.Collectors;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class StreamTest {

    @Test
    public void listTest() {
        List<String> list1 = new ArrayList<>();
        list1.add("a_1");
        list1.add("b_2");
        list1.add("c_3");
        list1.add("ab_4");
        list1.add("ac_5");
        list1.add("a_6");


        List<String> res2 = list1.stream().map(e -> e.split("_")[1]).collect(Collectors.toList());
        System.out.println(res2);

        //List<String> res = list1.stream().filter(e -> e.contains("a"))
        //        .filter(e -> e.length() == 2)
        //        .collect(Collectors.toList());
        //System.out.println(res);

        // 如果集合中有a,就添加到新集合中
        //List<String> list2 = new ArrayList<>();
        //for (String str : list1) {
        //    if(str.contains("a")){
        //        list2.add(str);
        //    }
        //}
        // 把长度为2的元素添加到新集合
        //List<String> list3 = new ArrayList<>();
        //for (String str : list2) {
        //    if (str.length() == 2) {
        //        list3.add(str);
        //    }
        //}
        //System.out.println(list3.toString());

    }

    @Test
    public void test() {
        // 过滤所有的偶数
        List<Integer> list = new ArrayList<>();
        list.addAll(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9,10));
        List<Integer> res = list.stream().filter(e -> e % 2 == 0).collect(Collectors.toList());
        System.out.println(res);

        // 保留年龄大于24的人, 将结果收集到Map中,姓名为键,年龄为值
        List<String> list2 = new ArrayList<>();
        list2.add("zhangsan,23");
        list2.add("lisi,24");
        list2.add("wangwu,25");
        Map<String, String> map = list2.stream()
                .filter(e -> Integer.parseInt(e.split(",")[1]) >= 24)
                .collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));
        System.out.println(map);

        /**
         * 有两个arraylist集合
         * 第一个集合中存储男演员的信息,第二个集合中存储女演员的信息
         * 男演员只要名字为3个字的人
         * 女演员只要名字例有杨的人
         * 把过滤后的男演员和女演员的名字合并到一起
         * 所有对象保存到list中
         */
        Actor actor1 = new Actor().builder()
                .name("张三")
                .age(18)
                .gender("male")
                .build();
        Actor actor2 = new Actor().builder()
                .name("李四")
                .age(19)
                .gender("male")
                .build();
        Actor actor3 = new Actor().builder()
                .name("王国强")
                .age(19)
                .gender("male")
                .build();
        Actor actor4 = new Actor().builder()
                .name("杨三")
                .age(18)
                .gender("female")
                .build();
        Actor actor5 = new Actor().builder()
                .name("沈四")
                .age(19)
                .gender("female")
                .build();
        Actor actor6 = new Actor().builder()
                .name("季五")
                .age(21)
                .gender("female")
                .build();
        List<Actor> list1 = Arrays.asList(actor1, actor2, actor3, actor4, actor5, actor6);
        List<String> res3 = list1.stream().filter(s -> s.getGender().equals("male")).map(Actor::getName).collect(Collectors.toList());
        System.out.println(res3);
    }
}
